{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Improving Variational Quantum Optimization using CVaR"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction\n",
    "\n",
    "This notebook shows how to use the Conditional Value at Risk (CVaR) objective function introduced in [1] within the variational quantum optimization algorithms provided by Qiskit. Particularly, it is shown how to setup the `MinimumEigenOptimizer` using `VQE` accordingly. \n",
    "For a given set of shots with corresponding objective values of the considered optimization problem, the CVaR with confidence level $\\alpha \\in [0, 1]$ is defined as the average of the $\\alpha$ best shots.\n",
    "Thus, $\\alpha = 1$ corresponds to the standard expected value, while $\\alpha=0$ corresponds to the minimum of the given shots, and $\\alpha \\in (0, 1)$ is a tradeoff between focusing on better shots, but still applying some averaging to smoothen the optimization landscape.\n",
    "\n",
    "## References\n",
    "\n",
    "[1] [P. Barkoutsos et al., *Improving Variational Quantum Optimization using CVaR,* Quantum 4, 256 (2020).](https://quantum-journal.org/papers/q-2020-04-20-256/)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.circuit.library import RealAmplitudes\n",
    "from qiskit.aqua.components.optimizers import COBYLA\n",
    "from qiskit.aqua.algorithms import NumPyMinimumEigensolver, VQE\n",
    "from qiskit.aqua.operators import PauliExpectation, CVaRExpectation\n",
    "from qiskit.optimization import QuadraticProgram\n",
    "from qiskit.optimization.converters import LinearEqualityToPenalty\n",
    "from qiskit.optimization.algorithms import MinimumEigenOptimizer\n",
    "from qiskit import execute, Aer\n",
    "from qiskit.aqua import aqua_globals\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from docplex.mp.model import Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "aqua_globals.random_seed = 123456"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Portfolio Optimization\n",
    "In the following we define a problem instance for portfolio optimization as introduced in [1].<br>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare problem instance\n",
    "n = 6            # number of assets\n",
    "q = 0.5          # risk factor\n",
    "budget = n // 2  # budget\n",
    "penalty = 2*n    # scaling of penalty term"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# instance from [1]\n",
    "mu = np.array([0.7313, 0.9893, 0.2725, 0.8750, 0.7667, 0.3622])\n",
    "sigma = np.array([\n",
    "    [ 0.7312, -0.6233,  0.4689, -0.5452, -0.0082, -0.3809],\n",
    "    [-0.6233,  2.4732, -0.7538,  2.4659, -0.0733,  0.8945],\n",
    "    [ 0.4689, -0.7538,  1.1543, -1.4095,  0.0007, -0.4301],\n",
    "    [-0.5452,  2.4659, -1.4095,  3.5067,  0.2012,  1.0922],\n",
    "    [-0.0082, -0.0733,  0.0007,  0.2012,  0.6231,  0.1509],\n",
    "    [-0.3809,  0.8945, -0.4301,  1.0922,  0.1509,  0.8992]\n",
    "])\n",
    "\n",
    "# or create random instance\n",
    "# mu, sigma = portfolio.random_model(n, seed=123)  # expected returns and covariance matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# create docplex model\n",
    "mdl = Model('portfolio_optimization')\n",
    "x = mdl.binary_var_list('x{}'.format(i) for i in range(n))\n",
    "objective = mdl.sum([mu[i]*x[i] for i in range(n)])\n",
    "objective -= q * mdl.sum([sigma[i,j]*x[i]*x[j] for i in range(n) for j in range(n)])\n",
    "mdl.maximize(objective)\n",
    "mdl.add_constraint(mdl.sum(x[i] for i in range(n)) == budget)\n",
    "\n",
    "# case to \n",
    "qp = QuadraticProgram()\n",
    "qp.from_docplex(mdl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "optimal function value: 1.27835\n",
       "optimal value: [1. 1. 0. 0. 1. 0.]\n",
       "status: SUCCESS"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# solve classically as reference\n",
    "opt_result = MinimumEigenOptimizer(NumPyMinimumEigensolver()).solve(qp)\n",
    "opt_result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# we convert the problem to an unconstrained problem for further analysis,\n",
    "# otherwise this would not be necessary as the MinimumEigenSolver would do this \n",
    "# translation automatically\n",
    "linear2penalty = LinearEqualityToPenalty(penalty=penalty)\n",
    "qp = linear2penalty.convert(qp)\n",
    "_, offset = qp.to_ising()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Minimum Eigen Optimizer using VQE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# set classical optimizer\n",
    "maxiter = 100\n",
    "optimizer = COBYLA(maxiter=maxiter)\n",
    "\n",
    "# set variational ansatz\n",
    "var_form = RealAmplitudes(n, reps=1)\n",
    "m = var_form.num_parameters\n",
    "\n",
    "# set backend\n",
    "backend_name = 'qasm_simulator'  # use this for QASM simulator\n",
    "# backend_name = 'statevector_simulator'  # use this for statevector simlator\n",
    "backend = Aer.get_backend(backend_name)  \n",
    "\n",
    "# run variational optimization for different values of alpha\n",
    "alphas = [1.0, 0.50, 0.25]  # confidence levels to be evaluated"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha = 1.0:\n",
      "optimal function value: 0.7295999999999907\n",
      "optimal value: [0. 1. 1. 0. 1. 0.]\n",
      "status: SUCCESS\n",
      "\n",
      "alpha = 0.5:\n",
      "optimal function value: 0.7295999999999907\n",
      "optimal value: [0. 1. 1. 0. 1. 0.]\n",
      "status: SUCCESS\n",
      "\n",
      "alpha = 0.25:\n",
      "optimal function value: 1.2783500000000068\n",
      "optimal value: [1. 1. 0. 0. 1. 0.]\n",
      "status: SUCCESS\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# dictionaries to store optimization progress and results\n",
    "objectives = {alpha: [] for alpha in alphas}  # set of tested objective functions w.r.t. alpha\n",
    "results = {}  # results of minimum eigensolver w.r.t alpha\n",
    "\n",
    "# callback to store intermediate results\n",
    "def callback(i, params, obj, stddev, alpha):\n",
    "    # we translate the objective from the internal Ising representation\n",
    "    # to the original optimization problem\n",
    "    objectives[alpha] += [-(obj + offset)]  \n",
    "\n",
    "# loop over all given alpha values\n",
    "for alpha in alphas:\n",
    "    \n",
    "    # initialize CVaR_alpha objective\n",
    "    cvar_exp = CVaRExpectation(alpha, PauliExpectation())\n",
    "    cvar_exp.compute_variance = lambda x: [0]  # to be fixed in PR #1373\n",
    "    \n",
    "    # initialize VQE using CVaR\n",
    "    vqe = VQE(expectation=cvar_exp, optimizer=optimizer, var_form=var_form, quantum_instance=backend,\n",
    "              callback=lambda i, params, obj, stddev: callback(i, params, obj, stddev, alpha))\n",
    "   \n",
    "    # initialize optimization algorithm based on CVaR-VQE\n",
    "    opt_alg = MinimumEigenOptimizer(vqe)\n",
    "\n",
    "    # solve problem\n",
    "    results[alpha] = opt_alg.solve(qp)\n",
    "    \n",
    "    # print results\n",
    "    print('alpha = {}:'.format(alpha))\n",
    "    print(results[alpha])\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "tags": [
     "nbsphinx-thumbnail"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot resulting history of objective values\n",
    "plt.figure(figsize=(10, 5))\n",
    "plt.plot([0, maxiter], [opt_result.fval, opt_result.fval], 'r--', linewidth=2, label='optimum')\n",
    "for alpha in alphas:\n",
    "    plt.plot(objectives[alpha], label='alpha = %.2f' % alpha, linewidth=2)\n",
    "plt.legend(loc='lower right', fontsize=14)\n",
    "plt.xlim(0, maxiter)\n",
    "plt.xticks(fontsize=14)\n",
    "plt.xlabel('iterations', fontsize=14)\n",
    "plt.yticks(fontsize=14)\n",
    "plt.ylabel('objective value', fontsize=14)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "optimal probabilitiy (alpha = 1.00):  0.0000\n",
      "optimal probabilitiy (alpha = 0.50):  0.0098\n",
      "optimal probabilitiy (alpha = 0.25):  0.2402\n"
     ]
    }
   ],
   "source": [
    "# evaluate and sort all objective values\n",
    "objective_values = np.zeros(2**n)\n",
    "for i in range(2**n):\n",
    "    x_bin = ('{0:0%sb}' % n).format(i)\n",
    "    x = [0 if x_ == '0' else 1 for x_ in reversed(x_bin)]\n",
    "    objective_values[i] = qp.objective.evaluate(x)\n",
    "ind = np.argsort(objective_values)\n",
    "\n",
    "# evaluate final optimal probability for each alpha\n",
    "probabilities = np.zeros(len(objective_values))\n",
    "for alpha in alphas:\n",
    "    if backend_name == 'qasm_simulator':\n",
    "        counts = results[alpha].min_eigen_solver_result.eigenstate\n",
    "        shots = sum(counts.values())\n",
    "        for key, val in counts.items():\n",
    "            i = int(key, 2)\n",
    "            probabilities[i] = val / shots\n",
    "    else:\n",
    "        probabilities = np.abs(results[alpha].min_eigen_solver_result.eigenstate)**2\n",
    "    print('optimal probabilitiy (alpha = %.2f):  %.4f' % (alpha, probabilities[ind][-1:]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h3>Version Information</h3><table><tr><th>Qiskit Software</th><th>Version</th></tr><tr><td>Qiskit</td><td>0.23.0</td></tr><tr><td>Terra</td><td>0.16.0</td></tr><tr><td>Aer</td><td>0.7.0</td></tr><tr><td>Ignis</td><td>0.5.0</td></tr><tr><td>Aqua</td><td>0.8.0</td></tr><tr><td>IBM Q Provider</td><td>0.11.0</td></tr><tr><th>System information</th></tr><tr><td>Python</td><td>3.7.4 (default, Aug 13 2019, 15:17:50) \n",
       "[Clang 4.0.1 (tags/RELEASE_401/final)]</td></tr><tr><td>OS</td><td>Darwin</td></tr><tr><td>CPUs</td><td>6</td></tr><tr><td>Memory (Gb)</td><td>16.0</td></tr><tr><td colspan='2'>Mon Oct 19 23:44:24 2020 CEST</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div style='width: 100%; background-color:#d5d9e0;padding-left: 10px; padding-bottom: 10px; padding-right: 10px; padding-top: 5px'><h3>This code is a part of Qiskit</h3><p>&copy; Copyright IBM 2017, 2020.</p><p>This code is licensed under the Apache License, Version 2.0. You may<br>obtain a copy of this license in the LICENSE.txt file in the root directory<br> of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.<p>Any modifications or derivative works of this code must retain this<br>copyright notice, and modified files need to carry a notice indicating<br>that they have been altered from the originals.</p></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import qiskit.tools.jupyter\n",
    "%qiskit_version_table\n",
    "%qiskit_copyright"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
